﻿''' <summary>
''' Абстрактный класс, предоставляющий базовую модель данных.
''' </summary>
''' <remarks></remarks>
<Table("Entities")>
Public MustInherit Class Entity
    Implements IEntity

    ''' <summary>
    ''' Устанавливает или возвращает уникальный идентификатор.
    ''' </summary>
    ''' <value></value>
    ''' <returns>Структура <see cref="Guid" />.</returns>
    ''' <remarks></remarks>
    <Key>
    <HiddenInput(DisplayValue:=False)>
    Public Property Id As Guid Implements IEntity.Id

    ''' <summary>
    ''' Устанавливает или возвращает название сущности. Это обязательное поле длиной не более 255 знаков.
    ''' </summary>
    ''' <value></value>
    ''' <returns><see cref="String" />.</returns>
    ''' <remarks></remarks>
    <Required(ErrorMessage:="Укажите название.")>
    <StringLength(255, ErrorMessage:="Не более {0} символов.")>
    <Display(Name:="Название", Order:=0)>
    Public Property Title As String Implements IEntity.Title

    ''' <summary>
    ''' Устанавливает или возвращает текст сущности. Тип данных поля <see cref="DataType.MultilineText" />.
    ''' </summary>
    ''' <value></value>
    ''' <returns><see cref="String" />.</returns>
    ''' <remarks>Это свойство помечено аттрибутом <see cref="UIHintAttribute" />, которое позволяет переопределить шаблон представления этого поля. Для этого необходимо создать частичное представление с именем этого свойства <c>Text</c>, и поместить его, в зависимости от назначения, в папку <c>DisplayTemplates</c> или <c>EditorTemplates</c>.</remarks>
    <UIHint("Text")>
    <DataType(DataType.MultilineText)>
    <AllowHtml>
    <Display(Name:="Текст", Order:=1)>
    Public Property Text As String Implements IEntity.Text
End Class

''' <summary>
''' Предоставляет базовые свойства модели данных.
''' </summary>
''' <remarks></remarks>
Public Interface IEntity
    Property Id As Guid
    Property Title As String
    Property Text As String
End Interface
